package com.qire.manhua.dal.service;

import com.qire.antsbinder.dal.DataService;
import com.qire.antsbinder.dal.annotation.StrategyAnnotation;
import com.qire.common.basic.ObjectUtil;
import com.qire.common.constant.CustomEvent;
import com.qire.common.constant.TeensModeManage;
import com.qire.common.constant.Url;
import com.qire.common.dal.WarehouseFactory;
import com.qire.common.dal.base.MD5;
import com.qire.common.utils.NoticeEventBus;
import com.qire.manhua.dal.ITeensModeDataDAL;
import com.qire.manhua.model.vo.TeensModeVO;

/**
 * 青少年模式数据接口服务
 */
public class TeensModeService extends DataService {

    /**
     * 青少年模式数据接口代理
     */
    private final ITeensModeDataDAL teensModeDataDAL = WarehouseFactory.create(this, ITeensModeDataDAL.class);

    /**
     * 查询当前青少年模式开启状态
     */
    public void queryTeensModeState() {
        teensModeDataDAL.queryState();
    }
    @StrategyAnnotation(event = Url.TeensModeQueryState)
    public void queryStateApiCallback(TeensModeVO dataVO, boolean isCache) {
        if(ObjectUtil.nonNull(dataVO) && ObjectUtil.nonNull(dataVO.teenager)) {
            TeensModeManage.updateTeensModeEnable(dataVO.teenager.is_open == 1);
        }
    }

    /**
     * 启用青少年模式
     * @param password 启用设置密码
     */
    public void enableTeensMode(String password) {
        teensModeDataDAL.enableTeensMode(MD5.Md5(String.format("x%sx", password)));
    }
    /**
     * 禁用青少年模式
     * @param password 禁用校验密码
     */
    public void disableTeensMode(String password) {
        teensModeDataDAL.disableTeensMode(MD5.Md5(String.format("x%sx", password)));
    }
    @StrategyAnnotation(event = {Url.TeensModeEnable, Url.TeensModeDisable})
    public void toggleApiCallback(TeensModeVO dataVO, boolean isCache) {
        TeensModeManage.updateTeensModeEnable(dataVO.teenager.is_open == 1);
        // 状态（is_open）为1的时候，说明是调用启用接口的返回，为0就说明是调用禁用的返回。
        NoticeEventBus.NOTICE.sendEvent(CustomEvent.TEENS_MODE_TOGGLE, dataVO.teenager.is_open == 1);

    }

    /**
     * 修改青少年模式密码
     * @param oldPassword 旧密码
     * @param newPassword 新密码
     */
    public void modifyPassword(String oldPassword, String newPassword) {
        teensModeDataDAL.modifyPassword(MD5.Md5(String.format("x%sx", oldPassword)), MD5.Md5(String.format("x%sx", newPassword)));
    }
    @StrategyAnnotation(event = Url.TeensModeModifyPassword)
    public void modifyApiCallback(TeensModeVO dataVO, boolean isCache) {
        TeensModeManage.updateTeensModeEnable(dataVO.teenager.is_open == 1);
        // 状态（is_open）为1的时候，说明是调用启用接口的返回，为0就说明是调用禁用的返回。
        NoticeEventBus.NOTICE.sendEvent(CustomEvent.TEENS_MODE_MODIFY, dataVO.teenager.is_open == 1);

    }

    /**
     * 校验青少年模式密码
     * @param password
     * @param sceneLabel
     */
    public void verifyPassword(String password, String sceneLabel) {
        teensModeDataDAL.verifyPassword(MD5.Md5(String.format("x%sx", password)), sceneLabel);
    }
    @StrategyAnnotation(event = Url.TeensModeVerifyPassword)
    public void verifyPasswordApiCallback(TeensModeVO dataVO, boolean isCache) {
        TeensModeManage.updateTeensModeEnable(dataVO.teenager.is_open == 1);
        // 状态（is_open）为1的时候，说明是调用启用接口的返回，为0就说明是调用禁用的返回。
        NoticeEventBus.NOTICE.sendEvent(CustomEvent.TEENS_MODE_VERIFY, dataVO.teenager.is_open == 1);
    }

}
